<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>理想主义的花</title>
		<link rel="stylesheet" type="text/css" href="index.css"/>
		<link rel="stylesheet" href="./01.css" />

     <!-- 依赖JQuery -->
     <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
     <!-- END -->

    <style>
    html, body { background: #000; margin: 0; padding:0;}
    canvas { width: 100%; height: 100%; position: absolute; }

    /* Demo Buttons Style */
    .codrops-demos {
        font-size: 0.8em;
        text-align:center;
        position:absolute;
        z-index:99;
        width:96%;
    }

    .codrops-demos a {
        display: inline-block;
        margin: 0.35em 0.1em;
        padding: 0.5em 1.2em;
        outline: none;
        text-decoration: none;
        text-transform: uppercase;
        letter-spacing: 1px;
        font-weight: 700;
        border-radius: 2px;
        font-size: 110%;
        border: 2px solid transparent;
        color:#fff;
    }

    .codrops-demos a:hover,
    .codrops-demos a.current-demo {
        border-color: #383a3c;
    }
    </style>
</head>
<body>
	<div class="channel" >
        <p >
			理想主义的花最终会盛开在浪漫主义土壤里<br>
            我的热情永远不会熄灭<br>
            在现实的平凡之中<br>
            我们终将上岸阳光万里
        </p>
		</div>

    <canvas></canvas>

    <div class="app">
        <div class="petal01"></div>
        <div class="petal02"></div>
        <div class="petal03"></div>
        <div class="petal04"></div>
        <div class="petal05"></div>
        <div class="petal06"></div>
        <div class="petal07"></div>
    </div>
    <div class="container">
        <div class="line" style="--color:#ec3e27;--x:3;--z:3;--d:1;"></div>
        <div class="line" style="--color:#fff;--x:3;--z:2;--d:2;"></div>
        <div class="line" style="--color:#fff;--x:4;--z:1;--d:3;"></div>
        <div class="line" style="--color:#fd79a8;--x:4;--z:0;--d:1;"></div>
        <div class="line" style="--color:#fff;--x:6;--z:-1;--d:2;"></div>
        <div class="line" style="--color:#0984e3;--x:6;--z:-2;--d:3;"></div>
        <div class="line" style="--color:#fff;--x:8;--z:-3;--d:1;"></div>
        <div class="line" style="--color:#fff;--x:10;--z:-4;--d:2;"></div>
        <div class="line" style="--color:#fff;--x:12;--z:-5;--d:3;"></div>
        <div class="line" style="--color:#fff;--x:14;--z:-6;--d:1;"></div>
        <div class="line" style="--color:#fff;--x:16;--z:-7;--d:2;"></div>
        <div class="line" style="--color:#fff;--x:18;--z:-8;--d:3;"></div>
        <div class="line" style="--color:#e056fd;--x:20;--z:-9;--d:1;"></div>


    </div>
<script>
    $(function(){
  var canvas = document.querySelector('canvas'),
      ctx = canvas.getContext('2d')
  canvas.width = window.innerWidth;
  canvas.height = window.innerHeight;
  ctx.lineWidth = .3;
  ctx.strokeStyle = (new Color(150)).style;

  var mousePosition = {
    x: 30 * canvas.width / 100,
    y: 30 * canvas.height / 100
  };

  var dots = {
    nb: 750,
    distance: 50,
    d_radius: 100,
    array: []
  };

  function colorValue(min) {
    return Math.floor(Math.random() * 255 + min);
  }

  function createColorStyle(r,g,b) {
    return 'rgba(' + r + ',' + g + ',' + b + ', 0.8)';
  }

  function mixComponents(comp1, weight1, comp2, weight2) {
    return (comp1 * weight1 + comp2 * weight2) / (weight1 + weight2);
  }

  function averageColorStyles(dot1, dot2) {
    var color1 = dot1.color,
        color2 = dot2.color;

    var r = mixComponents(color1.r, dot1.radius, color2.r, dot2.radius),
        g = mixComponents(color1.g, dot1.radius, color2.g, dot2.radius),
        b = mixComponents(color1.b, dot1.radius, color2.b, dot2.radius);
    return createColorStyle(Math.floor(r), Math.floor(g), Math.floor(b));
  }

  function Color(min) {
    min = min || 0;
    this.r = colorValue(min);
    this.g = colorValue(min);
    this.b = colorValue(min);
    this.style = createColorStyle(this.r, this.g, this.b);
  }

  function Dot(){
    this.x = Math.random() * canvas.width;
    this.y = Math.random() * canvas.height;

    this.vx = -.5 + Math.random();
    this.vy = -.5 + Math.random();

    this.radius = Math.random() * 2;

    this.color = new Color();
    console.log(this);
  }

  Dot.prototype = {
    draw: function(){
      ctx.beginPath();
      ctx.fillStyle = this.color.style;
      ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, false);
      ctx.fill();
    }
  };

  function createDots(){
    for(i = 0; i < dots.nb; i++){
      dots.array.push(new Dot());
    }
  }

  function moveDots() {
    for(i = 0; i < dots.nb; i++){

      var dot = dots.array[i];

      if(dot.y < 0 || dot.y > canvas.height){
        dot.vx = dot.vx;
        dot.vy = - dot.vy;
      }
      else if(dot.x < 0 || dot.x > canvas.width){
        dot.vx = - dot.vx;
        dot.vy = dot.vy;
      }
      dot.x += dot.vx;
      dot.y += dot.vy;
    }
  }

  function connectDots() {
    for(i = 0; i < dots.nb; i++){
      for(j = 0; j < dots.nb; j++){
        i_dot = dots.array[i];
        j_dot = dots.array[j];

        if((i_dot.x - j_dot.x) < dots.distance && (i_dot.y - j_dot.y) < dots.distance && (i_dot.x - j_dot.x) > - dots.distance && (i_dot.y - j_dot.y) > - dots.distance){
          if((i_dot.x - mousePosition.x) < dots.d_radius && (i_dot.y - mousePosition.y) < dots.d_radius && (i_dot.x - mousePosition.x) > - dots.d_radius && (i_dot.y - mousePosition.y) > - dots.d_radius){
            ctx.beginPath();
            ctx.strokeStyle = averageColorStyles(i_dot, j_dot);
            ctx.moveTo(i_dot.x, i_dot.y);
            ctx.lineTo(j_dot.x, j_dot.y);
            ctx.stroke();
            ctx.closePath();
          }
        }
      }
    }
  }

  function drawDots() {
    for(i = 0; i < dots.nb; i++){
      var dot = dots.array[i];
      dot.draw();
    }
  }

  function animateDots() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    moveDots();
    connectDots();
    drawDots();

    requestAnimationFrame(animateDots);
  }

  $('canvas').on('mousemove', function(e){
    mousePosition.x = e.pageX;
    mousePosition.y = e.pageY;
  });

  $('canvas').on('mouseleave', function(e){
    mousePosition.x = canvas.width / 2;
    mousePosition.y = canvas.height / 2;
  });

  createDots();
  requestAnimationFrame(animateDots);
});
</script>
</body>
</html>
